import Vue from "vue";
import Vuex from "vuex";

// 把需要在各个组件中传递使用的变量、方法定义在vuex中
Vue.use(Vuex)

// 设置所需的状态变量和方法
// 实现登录拦截器：记录用户信息的变量
// 使用一个用户对象而不仅仅使用一个布尔变量。
// 同时，设置一个方法，触发这个方法时可以为我们的用户对象赋值

// 在项目打开的时候会判断本地存储中是否有 user 这个对象存在，
// 如果存在就取出来并获得 username 的值，否则则把 username 设置为空。
// 这样我们只要不清除缓存，登录的状态就会一直保存。
export default new Vuex.Store({
    state:{
        username: window.sessionStorage.getItem('username') == null ? '' : JSON.parse(window.sessionStorage.getItem('username' || '[]')),
        managername: window.sessionStorage.getItem('managername') == null ? '' : JSON.parse(window.sessionStorage.getItem('managername' || '[]')),
        adminMenus: []
    },
    mutations:{
        initAdminMenu (state, menus) {
            state.adminMenus = menus
        },
        login (state, username) {
            state.username = username
            window.sessionStorage.setItem('username', JSON.stringify(username))
        },
        managerLogin (state, managername) {
            state.managername = managername
            window.sessionStorage.setItem('managername', JSON.stringify(managername))
        },
        logout (state) {
            // 注意不能用 null 清除，否则将无法判断 user 里具体的内容
            state.managername = ''
            state.username = ''
            window.sessionStorage.removeItem('username')
            window.sessionStorage.removeItem('managername')
        },
        managerLogout (state) {
            // 注意不能用 null 清除，否则将无法判断 user 里具体的内容
            state.managername = ''
            window.sessionStorage.removeItem('managername')
            state.adminMenus = []
        },
    }
})